package com.lxl.model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * 帖子
 * 
 * @author 刘星鹭
 * @Email liuxinglumail@163.com
 * @version 创建时间： 2014年8月31日 下午7:43:00
 */
@Entity
@Table(name = "t_posts")
public class Post {
    private Integer postNo; // 帖子编号
    private String postTitle; // 帖子标题
    private String postContent; // 帖子内容
    private User postUser; // 帖子作者
    private Tieba postTieba; // 帖子所在贴吧

    /**
     * 无参构造方法
     */
    public Post() {
    }

    /**
     * 带参构造方法
     * 
     * @param postTitle
     *            帖子标题
     * @param postContent
     *            帖子内容
     * @param postUser
     *            帖子作者
     * @param postTieba
     *            帖子所在贴吧
     */
    public Post(String postTitle, String postContent, User postUser,
            Tieba postTieba) {
        this.postTitle = postTitle;
        this.postContent = postContent;
        this.postUser = postUser;
        this.postTieba = postTieba;
    }

    /**
     * 获得帖子号
     * 
     * @return 帖子号
     */
    @Id
    @GeneratedValue
    @Column(name = "post_no")
    public Integer getPostNo() {
        return postNo;
    }

    /**
     * 设置帖子号
     * 
     * @param postNo
     *            帖子号
     */
    public void setPostNo(Integer postNo) {
        this.postNo = postNo;
    }

    /**
     * 获得帖子标题
     * 
     * @return 帖子标题
     */
    @Column(name = "post_title", length = 20, nullable = false)
    public String getPostTitle() {
        return postTitle;
    }

    /**
     * 设置帖子标题
     * 
     * @param postTitle
     *            帖子标题
     */
    public void setPostTitle(String postTitle) {
        this.postTitle = postTitle;
    }

    /**
     * 获得帖子内容
     * 
     * @return 帖子内容
     */
    @Lob
    @Column(name = "post_content", nullable = false)
    public String getPostContent() {
        return postContent;
    }

    /**
     * 设置帖子内容
     * 
     * @param postContent
     *            帖子内容
     */
    public void setPostContent(String postContent) {
        this.postContent = postContent;
    }

    /**
     * 获得帖子作者
     * 
     * @return 帖子作者
     */
    @ManyToOne(cascade = {CascadeType.REFRESH, CascadeType.MERGE,CascadeType.REMOVE}, fetch = FetchType.EAGER // 只要是@xxxOne默认fetchType是eager
    , optional = false // 代表这个对象是不是可有可无的
    )
    @JoinColumn(name = "user_name")
    // 指定外键的名称
    public User getPostUser() {
        return postUser;
    }

    /**
     * 设置帖子作者
     * 
     * @param postUser
     *            帖子作者
     */
    public void setPostUser(User postUser) {
        this.postUser = postUser;
    }

    /**
     * 获得帖子所在贴吧
     * 
     * @return 帖子所在贴吧
     */
    @ManyToOne(cascade = {CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.EAGER // 只要是@xxxOne默认fetchType是eager
    , optional = false // 代表这个对象是不是可有可无的
    )
    @JoinColumn(name = "tieba_name")
    // 指定外键的名称
    public Tieba getPostTieba() {
        return postTieba;
    }

    /**
     * 设置帖子所在贴吧
     * 
     * @param postTieba
     *            帖子所在贴吧
     */
    public void setPostTieba(Tieba postTieba) {
        this.postTieba = postTieba;
    }

    /**
     * hashCode方法
     */
    // 重写hashcode和equals方法，因为对象是否相等是用postNo判断的，生成方法是alt+shift+s生成hashcode()和equals()
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((postNo == null) ? 0 : postNo.hashCode());
        return result;
    }

    /**
     * equals方法
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Post other = (Post) obj;
        if (postNo == null || !postNo.equals(other.postNo)
                && other.postNo != null) {
            return false;
        }
        return true;
    }
}
